home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 March / PCWorld_2007-03_cd.bin / domacnost a kancelar / scribus / scribus-1.3.3.7-win32-install.exe / lib / email / Iterators.py < prev    next >
Text File  |  2004-10-15  |  2KB  |  68 lines

  1. # Copyright (C) 2001-2004 Python Software Foundation
  2. # Author: Barry Warsaw
  3. # Contact: email-sig@python.org
  4.  
  5. """Various types of useful iterators and generators."""
  6.  
  7. import sys
  8. from cStringIO import StringIO
  9.  
  10.  
  11.  
  12. # This function will become a method of the Message class
  13. def walk(self):
  14.     """Walk over the message tree, yielding each subpart.
  15.  
  16.     The walk is performed in depth-first order.  This method is a
  17.     generator.
  18.     """
  19.     yield self
  20.     if self.is_multipart():
  21.         for subpart in self.get_payload():
  22.             for subsubpart in subpart.walk():
  23.                 yield subsubpart
  24.  
  25.  
  26.  
  27. # These two functions are imported into the Iterators.py interface module.
  28. # The Python 2.2 version uses generators for efficiency.
  29. def body_line_iterator(msg, decode=False):
  30.     """Iterate over the parts, returning string payloads line-by-line.
  31.  
  32.     Optional decode (default False) is passed through to .get_payload().
  33.     """
  34.     for subpart in msg.walk():
  35.         payload = subpart.get_payload(decode=decode)
  36.         if isinstance(payload, basestring):
  37.             for line in StringIO(payload):
  38.                 yield line
  39.  
  40.  
  41. def typed_subpart_iterator(msg, maintype='text', subtype=None):
  42.     """Iterate over the subparts with a given MIME type.
  43.  
  44.     Use `maintype' as the main MIME type to match against; this defaults to
  45.     "text".  Optional `subtype' is the MIME subtype to match against; if
  46.     omitted, only the main type is matched.
  47.     """
  48.     for subpart in msg.walk():
  49.         if subpart.get_content_maintype() == maintype:
  50.             if subtype is None or subpart.get_content_subtype() == subtype:
  51.                 yield subpart
  52.  
  53.  
  54.  
  55. def _structure(msg, fp=None, level=0, include_default=False):
  56.     """A handy debugging aid"""
  57.     if fp is None:
  58.         fp = sys.stdout
  59.     tab = ' ' * (level * 4)
  60.     print >> fp, tab + msg.get_content_type(),
  61.     if include_default:
  62.         print >> fp, '[%s]' % msg.get_default_type()
  63.     else:
  64.         print >> fp
  65.     if msg.is_multipart():
  66.         for subpart in msg.get_payload():
  67.             _structure(subpart, fp, level+1, include_default)
  68.